package com.wfg.codegendoc.assistant;

import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.spring.AiService;

import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;


/**
 * 最简单的Assistant
 * 如果我们在配置文件中同时配置了多个大语言模型，所以需要在这里明确指定（EXPLICIT）模型的beanName（openAiChatModel)
 * 如果只有一个可以不指定
 */
@AiService(wiringMode = EXPLICIT, chatModel = "openAiChatModel")
public interface Assistant {
    /**
     * 聊天方法
     * @param userMessage
     * @return
     */
    @SystemMessage(fromResource = "system_prompt")
    String chat(String userMessage);

    /**
     * 可以做的优化点：
     * 1. 模版匹配，不通的场景使用不同的模版， 比如类，属性， 方法
     *    根据代码层级结构不一样生成不一样，比如controller注重返回值data内容，entity 注重英文转汉字能力
     *    根据业务语义生成
     *    代码类型	优化重点	              危险陷阱
     *     算法代码	时间/空间复杂度说明	AI误判大O复杂度
     *     业务逻辑	领域规则关联	        遗漏特殊边界条件
     *     API接口	状态码/错误码映射	    未关联最新文档
     *     并发处理	线程安全标识	        未提示竞态条件
     *
     * 2. 模版优化
     * 代码-》 ai生成注释 -》 记录采集信息 -》 反哺提示词
     *
     * 3. 生成注释 脚本自动检查
     *    a. 过于冗长
     *    b. 给一些模棱两可的说法： 可能，大概，也许等
     *    c. 移除AI生成的冗余修饰词（如“这个函数主要用于...”）
     */
}
